package com.eonmind.user.utils;

import com.eonmind.common.contract.enums.user.PasswordComplexity;

public class JudgePasswordComplexityUtil {
    /**
     * 判断密码复杂度
     *
     * @param password 待检查的密码
     * @return 密码复杂度代码：1-低，2-中，3-高
     */
    public static Integer judgePasswordComplexity(String password) {
        // 检查是否为空
        if (password == null || password.isEmpty()) {
            return PasswordComplexity.Low.getCode();
        }

        // 计算包含的字符类型数量
        boolean hasDigit = false;
        boolean hasLetter = false;
        boolean hasSpecial = false;

        for (char c : password.toCharArray()) {
            if (Character.isDigit(c)) {
                hasDigit = true;
            } else if (Character.isLetter(c)) {
                hasLetter = true;
            } else {
                // 非字母非数字视为特殊字符
                hasSpecial = true;
            }

            // 如果已经发现所有类型，可以提前结束循环
            if (hasDigit && hasLetter && hasSpecial) {
                break;
            }
        }

        // 计算字符类型数量
        int typeCount = (hasDigit ? 1 : 0) + (hasLetter ? 1 : 0) + (hasSpecial ? 1 : 0);

        // 根据字符类型数量判断复杂度
        switch (typeCount) {
            case 1:
                return PasswordComplexity.Low.getCode(); // 只有一种字符类型
            case 2:
                return PasswordComplexity.Middle.getCode(); // 包含两种字符类型
            case 3:
                return PasswordComplexity.High.getCode(); // 包含三种字符类型
            default:
                return PasswordComplexity.Low.getCode(); // 不应该到达这里
        }
    }

}
